1
'--------------------------------------------------------------------------
3 ' Copyright (c) Microsoft Corporation. All rights reserved.
7 '--------------------------------------------------------------------------
9 Imports System
.Threading
10 Imports System
.Threading
.Tasks
11 Imports System
.Windows
.Forms
.DataVisualization
.Charting
15 Private _uiScheduler
As TaskScheduler
16 Private _serial
As DataPoint
17 Private _parallel
As DataPoint
18 Private _max
As Double = 0
20 Private Sub MainForm_Load(ByVal sender
As System
.Object, ByVal e
As System
.EventArgs
) Handles MyBase
.Load
21 _uiScheduler
= TaskScheduler
.FromCurrentSynchronizationContext()
25 Private Sub SetupPoints()
26 _serial
= chart1
.Series(0).Points(chart1
.Series(0).Points
.AddXY("Serial", 0.0))
27 _parallel
= chart1
.Series(0).Points(chart1
.Series(0).Points
.AddXY("Parallel", 0.0))
28 chart1
.ChartAreas(0).AxisY
.Minimum
= 0.0
29 chart1
.ChartAreas(0).AxisY
.Maximum
= 10.0
34 Private Sub ClearPointValues()
35 For Each Point
In New DataPoint() {_serial
, _parallel
}
40 .Font
= New System
.Drawing
.Font(Point
.Font
, System
.Drawing
.FontStyle
.Bold
)
48 Private Sub btnSolve_Click(ByVal sender
As System
.Object, ByVal e
As System
.EventArgs
) Handles btnSolve
.Click
50 If Int32
.TryParse(cbNumQueens
.Text
, numQueens
) = False Then Return
52 btnSolve
.Enabled
= False
53 progressBar1
.Visible
= True
58 Task
.Factory
.StartNew(Sub()
59 Dim elapsed
As TimeSpan
62 NQueensSolver
.Sequential(numQueens
)
64 SetPoint(_serial
, elapsed
.TotalSeconds
)
67 NQueensSolver
.Parallel(numQueens
)
69 SetPoint(_parallel
, elapsed
.TotalSeconds
)
72 progressBar1
.Visible
= False
73 btnSolve
.Enabled
= True
74 If t
.IsFaulted
Then MessageBox
.Show(t
.Exception
.ToString())
75 End Sub, _uiScheduler
)
79 Private Sub SetPoint(ByVal point
As DataPoint
, ByVal seconds
As Double)
80 Task
.Factory
.StartNew(Sub()
81 If seconds
> _max
Then
83 chart1
.ChartAreas(0).AxisY
.Maximum
= _max
* 1.1
85 point
.SetValueY(seconds
)
86 point
.ToolTip
= seconds
.ToString("F3")
87 point
.Label
= String.Format("{0:F3} secs ({1:F2}x)", seconds
, (_max
/ seconds
))
89 End Sub, CancellationToken
.None
, TaskCreationOptions
.None
, _uiScheduler
)
92 Private Shared
Function Time(ByVal action
As Action
) As TimeSpan
93 Dim sw
= Stopwatch
.StartNew()